import pymysql


class DBTools(object):
    # 创建静态方法，用户在使用的时候不适合看见，设置私有方法，只有类内部可以查看操作
    @staticmethod
    # 建立连接
    def db_connect():
        conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
                               password="iHRM_student_2022", database="ihrm", charset="utf8")
        # 建立连接，返回连接的对象
        return conn
# 数据库查询一条
    @staticmethod  # 有参数为什么不用类方法？？？？？？？？使定义类方法:@classmethoddef 类方法名(cls):
    def query_one(sql):
        conn = None
        cursor = None  # 创建全局变量，解决finally中的变量不存在问题
        try:
            # 创建连接
            conn = DBTools.db_connect()
            # 创建游标
            cursor = conn.cursor()  # 此处的conn与cursor是局部变量，因此在finally中报黄
            # 执行 sql 语句 --- 查询
            cursor.execute(sql)
            # 提取结果
            ret = cursor.fetchone()
            # 返回查询的一条记录
            return ret

        except Exception as err:
            print("出现异常了，异常的类型是：", err)
        finally:
            # 关闭游标
            cursor.close()
            # 关闭连接
            conn.close()

# 查询多条
    # def query_many(self, sql):
    #     pass
    #     # 执行sql语句，获取结果集
    #     # 返回查询的多条记录
    #     conn = None
    #     cursor = None  # 创建全局变量，解决finally中的变量不存在问题
    #     try:
    #         # 创建连接
    #         conn = self.db_connect()
    #         # 创建游标
    #         cursor = conn.cursor()  # 此处的conn与cursor是局部变量，因此在finally中报黄
    #         # 执行 sql 语句 --- 查询
    #         cursor.execute(sql)
    #         # 提取结果
    #         cursor.rownumber = 0
    #         ret1 = cursor.fetchmany(2)
    #         # 返回查询的一条记录
    #         return ret1
    #
    #     except Exception as err:
    #         print("出现异常了，异常的类型是：", err)
    #     finally:
    #         # 关闭游标
    #         cursor.close()
    #         # 关闭连接
    #         conn.close()

# 数据库增删改
    @staticmethod
    def db_idu(sql):
        conn = None
        cursor = None
        try:
            # 创建连接
            conn = DBTools.db_connect()
            # 创建游标
            cursor = conn.cursor()
            # 执行sql语句
            cursor.execute(sql)
            # 操作事务(提交、回滚)
            conn.commit()
            print("数据库操作完成！")
        except Exception as err:
            print("出现异常了，异常信息为：", err)
            conn.rollback()
        finally:
            # 关闭游标
            cursor.close()
            # 关闭连接
            conn.close()


if __name__ == '__main__':
    # a = DBTools()
    # 调用数据库查询操作
    ret = DBTools.query_one("select * from t_book;")
    print(ret)

    # 调用数据库增删改操作,删除、修改操作重复删除、修改，数据库不会报错
    DBTools.db_idu("delete from t_book where id = 457;")
    DBTools.db_idu("update t_book set `read`= `read` +1 where id = 5;")
    DBTools.db_idu("insert into t_book(id,title,pub_date) values(457,'甄嬛传', '2022-09-13');")
